#ifndef ___fat32_leer_escribir_sectores

#define ___fat32_leer_escribir_sectores 1

#include "f32_dles.c"
#include "f32_cch.c"
#include "f32_le_1.c"
#include <stdlib.h>

void fat32_solicitar_lectura_bloque(unsigned int, unsigned int, unsigned long, void *);
void fat32_solicitar_escritura_bloque(unsigned int, unsigned int, unsigned long, const void *);

void fat32_solicitar_lectura_bloque (unsigned int transaccion, unsigned int conexion, unsigned long sector, void * bufferLectura) {
  unsigned long sectorPedido = sector;
  sectorPedido &= ~3LU;
  fat32_insertar_bloqueo_lectura(transaccion, conexion, sectorPedido, bufferLectura);
  unsigned char pos = fat32_bloque_cache_existe(sectorPedido);
  if (pos != 255) {
    fat32_leer_bloque_cache(pos, bufferLectura);
    fat32_insertar_operacion_terminada(transaccion, sectorPedido, 0);
  } else
    fat32_leer_bloque(sectorPedido, conexion);
}

void fat32_solicitar_escritura_bloque (unsigned int transaccion, unsigned int conexion, unsigned long sector, const void * datos) {
  unsigned long sectorPedido = sector;
  sectorPedido &= ~3LU;
  fat32_insertar_bloqueo_escritura(transaccion, conexion, sectorPedido);
  unsigned char pos = fat32_bloque_cache_existe(sectorPedido);
  if (pos != 255) {
    fat32_escribir_bloque_cache(pos, datos);
    fat32_insertar_operacion_terminada(transaccion, sectorPedido, 1);
  } else
    fat32_escribir_bloque(sectorPedido, conexion, datos, 15);
}

#endif